import { isValidKey } from '@/utils/isValidKey'

const store = {
  state: {
    token: localStorage.getItem('token') || '',
    userInfo: localStorage.getItem('userInfo') ? JSON.parse(String(localStorage.getItem('userInfo'))) : ''
  },
  actions: {
    // 只放同步任务
    setToken(newState: { token: string }, action: { type: string; val: string }) {
      newState.token = action.val
      localStorage.setItem('token', action.val)
      action.val ? localStorage.setItem('record-time', String(new Date().getTime())) : localStorage.setItem('record-time', '0')
    },
    setUserInfo(newState: { userInfo: object }, action: { type: string; val: object }) {
      newState.userInfo = action.val
      localStorage.setItem('userInfo', JSON.stringify(action.val))
    }
  },
  // 优化redux-thunk的异步写法(模仿Vuex的写法)
  asyncActions: {
    // 只放异步的方法
  },
  // 名字统一管理
  // add1:"add1",
  // add2:"add2"
  // actionNames:{
  //   add1:"add1",
  //   add2:"add2",
  // }
  actionNames: {}
}

// 我们现在想做到actionNames自动生成。不用我每一次添加一个方法，都要在actionNames手动添加键值对，这样很麻烦。
const actionNames = {} // 定义一个全局的actionNames
// actionNames有多少对键值对，取决于action里面有多少个函数。所以遍历store.actions，给actionNames添加键值对
for (const key in store.actions) {
  if (isValidKey(key, store.actions)) {
    actionNames[key] = key
  }
}
store.actionNames = actionNames

export default store
